# coding:utf-8
from PIL import Image, ImageDraw

from logger import Logger

logger = Logger("test").get_log()

# 二值判断,如果确认是噪声,用改点的上面一个点的灰度进行替换  #getPixel()得到(height, width)处的像素值（可能是一个list，3通道）
# 该函数也可以改成RGB判断的,具体看需求如何
def getPixel(image, x, y, G, N):
    L = image.getpixel((x, y))
    info = str(L)+'--'+str(x)+'--'+str(y)
    logger.info(info)
    if L<80:
        return image.getpixel((x, y))
    elif L < 128 and L>125:
        return image.getpixel((240, 114))
    else:
        return image.getpixel((1, 1))


# 降噪
# 根据一个点A的RGB值，与周围的8个点的RBG值比较，设定一个值N（0 <N <8），当A的RGB值与周围8个点的RGB相等数小于N时，此点为噪点
# G: Integer 图像二值化阀值
# N: Integer 降噪率 0 <N <8
# Z: Integer 降噪次数
# 输出
#  0：降噪成功
#  1：降噪失败
def clearNoise(image, G, N, Z):
    draw = ImageDraw.Draw(image)
    print('size',image.size[0],image.size[1])
    for i in range(0, Z):
        for x in range(1, image.size[0] - 1):
            for y in range(1, image.size[1] - 1):
                color = getPixel(image, x, y, G, N)
                if color != None:
                    draw.point((x, y), color)



# 测试代码
def main():
    # 打开图片
    image = Image.open("y.jpg")

    # 将图片转换成灰度图片
    image = image.convert("L")
    #image.save('y-c.jpg')

    # 去噪,G = 50,N = 4,Z = 4
    clearNoise(image, 128, 2, 1)

    # 保存图片
    image.save("y-copy.jpg")


if __name__ == '__main__':
    main()